# 演示新的写法，静态方法，类方法
from dataclasses import dataclass


@dataclass
class Student:

    def __init__(self, name, age, idcard) -> None:
        self.name = name
        self.age = age
        self.idcard = idcard
        super().__init__()

    # 静态方法，对象和类调用，不能和其他方法重名，不然会相互覆盖，后面定义的会覆盖前面的
    @staticmethod
    def print_stu_info():
        print(f'静态方法 print_stu_info')

    # 类方法，对象和类调用，不能和其他方法重名，不然会相互覆盖，后面定义的会覆盖前面的
    @classmethod
    def print_stu_name(cls):
        print(f'类方法(print_stu_name)')

    # 私有方法，self调用,只能在本类中调用
    def __print_stu_idcard(self):
        print(f'私有方法(print_stu_name)：name = {self.name} ')

    # 普通公共方法
    def print_stu_age(self):
        print(f'普通方法(print_stu_name)：name = {self.age} ')
        # 调用私有方法
        self.__print_stu_idcard()


if __name__ == '__main__':
    # 创建对象实例
    stu = Student("tom", 20, "1111112222")

    # 调用类方法
    stu.print_stu_name()
    Student.print_stu_name()

    print("----------------------------分割线----------------------------")
    # 调用静态方法
    stu.print_stu_info()
    Student.print_stu_info()

    print("----------------------------分割线----------------------------")
    # 调用普通方法
    stu.print_stu_age()
    Student.print_stu_age(stu)
